import express from 'express'
//导入路由模块
import User from './src/user.js'
import List from './src/list.js'
//导入日志中间件 防盗链中间件
import logerFunction from './middleWare/logger.js'
import refferFunction from './reffer/app.js'

//实例化express
const app=express()
//post请求数据解析中间件
app.use(express.json())
//静态资源目录【第二个参数】，并设置访问路径【第一个参数，如果不设置，/xxx】 /static/xxx 
app.use('/static',express.static('static')) 
/* 中间件 */
    //注册防盗链中间件
    app.use(refferFunction)
    //注册日志中间件
    app.use(logerFunction)

/* 注册路由模块 */
    app.use('/user',User)
    app.use('/list',List)

/* 响应头和请求头 在调用接口的时候才会测试到 */    
app.use((req,res,next)=>{
    //1,解决同源策略问题【浏览器有同源策略，不同域名 端口 协议 不能通信】
    //2，* session数据种植到浏览器的cookie中，不能成功
    res.setHeader('Access-Control-Allow-Origin','*')
    //允许这些请求方法【默认只允许GET和POST和HEAD】
    res.setHeader('Access-Control-Allow-Methods','GET,POST,PUT,DELETE,OPTIONS,HEAD,PATCH')
    //允许请求头
    /*
        预检请求：
       //cors 的content-type 默认支持 :
        application/x-www-form-urlencoded【?name=1&age=2】, 
        text/plain【纯文本】, 
        multipart/form-data【new formData】 类型
    */
    res.setHeader('Access-Control-Allow-Headers','Content-Type')

    
  
   
    next()
})
 //自定义响应头
app.get('/info',(req,res)=>{
   
    /**
     * 前端获取
     fetch('http://localhost:3000/info')
        .then(res =>{
                const headers =res.headers
                console.log(headers.get('Express'))
                return res.json()
            })
        .then(res =>{
            console.log(res)
        }
     * **/
        res.set('Expres','Hello')//设置自定义响应头
        res.setHeader('Access-Control-Expose-Headers','Express')//暴露自定义响应头【前端可以获取到】
        res.json({
            name:'zhangsan',
            age:20
        })
})

//SSE响应
/*
    前端接收：
    //SSE
        const SSE = new EventSource('http://localhost:3000/sse')
        SSE.addEventListener('message', (e) => {
            console.log(e.data)
        })
*/
app.get('/sse',(req,res)=>{       
     //SSE: 服务器发送事件【实时通信】单工通讯
   //大屏项目：后端需要实时给前端发送信息
   res.setHeader('Content-Type','text/event-stream')
   setInterval(() => {
    res.write('data：'+new Date().toLocaleString()+'\n\n')
   }, 1000);                           
})



//监听端口
app.listen(3000,()=>{
    console.log('Server is running on port 3000')
})



